(function($,w){
  // mian/util.js
  var f = function(){
    this.fun = null;
  };
    /**
     * 跳转登录
     * @returns {boolean}
     */
    f.prototype.toLogin = function(){
        var userInfo=JSON.parse(sessionStorage.getItem("userInfo"));
        if(!userInfo){
            location.href="/loginIndex";
            return false;
        }
        return true;
    };
    /**
     * 是否登录
     * @returns {boolean}
     */
    f.prototype.isLogin = function(){
        var userInfo=JSON.parse(sessionStorage.getItem("userInfo"));
        if(!userInfo){
            return true;
        }
        return false;
    };
  /*
  * ajax请求
  * opt.abortable  请求终止(abort)时,是否调用回调,默认不调用回调
  * opt.cache 是否缓存请求，默认不缓存
  *
  * cb(b) 回调中数据结构
  * b.body   服务器返回的字符串格式数据（当dataType不为json时才有）
  * b.status 请求状态 为200时表示请求成功返回，可以处理下一步
  * b.json  只有以下情况才有：
  *     1.当请求时设置dataType为json(此时为json格式化后的数据)
  *     2.者请求失败时(此时为篡改的json格式数据，code永远为-1)
  *
  * */
  f.prototype.ajax = function(opt,cb){
    opt.cache = !!opt.cache;
    var b = {};
    if(typeof cb == "function"){
      opt.success = function(a,stat,xhr){
        b.status = xhr.status ;
        b.headers = xhr.getAllResponseHeaders();
        if(xhr.responseJSON){
          b.json = xhr.responseJSON;
        }else{
          b.body = xhr.responseText;
        }
        cb(b);
      };
      opt.error = function(xhr,stat,err){
        if(stat=="abort" && !opt.abortable){
          return false;
        }else{
          b.body = xhr.responseText||"";
          b.status = xhr.status;
          b.headers = xhr.getAllResponseHeaders();
          b.json = {code: -1,message:"请求服务器失败"};
          cb(b);
        }
      }
    }
    return $.ajax(opt);
  };
  f.prototype.init = function(init){
    if(typeof init =="function"){
      if(typeof init=="function"&&window.removeEventListener){
        window.removeEventListener('hashchange',this.fun)
      }
      this.fun = init;
    }else{
      this.fun = function(){};
    }
    if(window.addEventListener){
      window.addEventListener('hashchange', this.fun, false);
    }else{
      var $this = this;
      setInterval(function(){
        var hash = location.hash.slice(1);
        if($this.hash&&$this.hash!=hash){
          $this.fun();
        }else{
          $this.hash = hash;
        }
      },100)
    }
    this.fun();
  };
  w.lutil = new f();

  if(Vue){
    Vue.prototype.ajax = w.lutil.ajax;
    Vue.prototype.toLogin = w.lutil.toLogin;
    Vue.prototype.isLogin = w.lutil.isLogin;
  }
})(jQuery,window);